﻿<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
                xmlns:sp="http://schemas.microsoft.com/sharepoint/"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:msxsl="urn:schemas-microsoft-com:xslt"
                exclude-result-prefixes="msxsl sp"
                extension-element-prefixes="sp">
  
  <xsl:output method="xml" indent="yes"/>

  <!--
  ====================================================================================================================================
  Copie d'élément récursivement sans namespaces
  ====================================================================================================================================
  usage :
  <xsl:apply-templates select="<<xpathquery>>" mode="copy-no-namespaces"/>
  ====================================================================================================================================
  -->
  <xsl:template match="*" mode="copy-no-namespaces">
    <xsl:element name="{local-name()}">
      <xsl:copy-of select="@*"/>
      <xsl:apply-templates select="node()" mode="copy-no-namespaces"/>
    </xsl:element>
  </xsl:template>

  <xsl:template match="comment()| processing-instruction()" mode="copy-no-namespaces">
    <xsl:copy/>
  </xsl:template>

  <!--
  ====================================================================================================================================
  Remplacement d'un texte par un autre
  ====================================================================================================================================
  usage :
  <xsl:variable name="myVar">
    <xsl:call-template name="string-replace-all">
      <xsl:with-param name="text" select="'This is a sample text : {ReplaceMe} and {ReplaceMe}'" />
      <xsl:with-param name="replace" select="'{ReplaceMe}'" />
      <xsl:with-param name="by" select="'String.Replace() in XSLT'" />
    </xsl:call-template>
  </xsl:variable>
  ====================================================================================================================================
  -->
  <xsl:template name="string-replace-all">
    <xsl:param name="text" />
    <xsl:param name="replace" />
    <xsl:param name="by" />
    <xsl:choose>
      <xsl:when test="contains($text, $replace)">
        <xsl:value-of select="substring-before($text,$replace)" />
        <xsl:value-of select="$by" />
        <xsl:call-template name="string-replace-all">
          <xsl:with-param name="text"
          select="substring-after($text,$replace)" />
          <xsl:with-param name="replace" select="$replace" />
          <xsl:with-param name="by" select="$by" />
        </xsl:call-template>
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-of select="$text" />
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

  <!--
  ====================================================================================================================================
  [SharePoint]
  Remplacement d'une référence de ressource par sa valeur
  ====================================================================================================================================
  usage :
  <xsl:call-template name="resolve-resource-token">
    <xsl:with-param name="resourceToken" select="<<MyResourceToken>>"
  </xsl:call-template>
  ====================================================================================================================================
  -->
  <xsl:template name="resolve-resource-token">
    <xsl:param name="resourceToken"/>
    <xsl:choose>
      
      <xsl:when test="starts-with($resourceToken, '$')">
        <xsl:variable name="resourceFile" select="substring-before( substring-after($resourceToken, '$Resources:') , ',')"/>
        <xsl:variable name="resourceKey" select="substring-before( substring-after($resourceToken, ',') , ';')"/>
        <xsl:variable name="resourceValue" select="//ResX[@name=$resourceFile]/data[@key=$resourceKey]/@value"/>
        
        <xsl:choose>
          <xsl:when test="$resourceValue">
            <xsl:value-of select="$resourceValue" />
          </xsl:when>
          <xsl:otherwise>
            <xsl:value-of select="$resourceToken" />
          </xsl:otherwise>
        </xsl:choose>
        
      </xsl:when>
      
      <xsl:otherwise>
        <xsl:value-of select="$resourceToken" />
      </xsl:otherwise>
      
    </xsl:choose>
  </xsl:template>

</xsl:stylesheet>
